package com.cfwx.designpatterns.proxy.dynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * JDK动态代理类
 * @author Administrator
 */
public class BookFacadeProxy implements InvocationHandler {
	//关联的委托对象
	private Object target;
	
	//绑定委托对象，动态生成并返回一个代理类 （写法固定）
	public Object bind(Object target){
		this.target = target;
		System.out.println(this.target);
		//取得代理对象
		return Proxy.newProxyInstance(
				target.getClass().getClassLoader(), 
				target.getClass().getInterfaces(), this);
	}

	/**
	 * 要处理的对象中的每个方法会被此方法送去JVM调用,也就是说,
	 * 要处理的对象的方法只能通过此方法调用，此方法是动态的,不是手动调用的
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
	throws Throwable {
		Object result=null;  
		System.out.println("事物开始");  
		//执行方法  
		result=method.invoke(this.target, args);
		if(args!=null){
			for(Object obj:args){
				System.out.println("参数："+obj.toString());
			}
		}
		System.out.println("事物结束");  
		return result; 

	}

}
